package cn.hchaojie.camp.day13;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

// 创建一个服务器，接收客户端请求
// ServerSocket
// 实现：能同时接收多个客户端的连接


public class Server2 {
	public static void main(String[] args) {
		// 端口不能用1024端口以下的
		ServerSocket server = null;
		try {
			server = new ServerSocket(6666);
			
			System.out.println("服务器启动了，准备接收连接。。。");
			
			// 接收一个客户端连接
			// 如果有客户端连接，accept会马上返回一个socket对象
			// 如果没有，accept方法会让当前的线程处于阻塞状态
			while (true) {
				Socket socket = server.accept();	// socket代表连接上的客户端
				System.out.println("连上了一个客户端：" + socket.getInetAddress() + " 端口：" + socket.getPort());
				new Thread(new ClientThread(socket)).start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			Utils.closeQuietly(server);
		}
	}

}

// 作用：和每一个连接的客户端socket进行异步通信
class ClientThread implements Runnable {
	private DataInputStream in;
	private Socket socket;

	public ClientThread(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		// 开始通信
		try {
			in = new DataInputStream(
					new BufferedInputStream(socket.getInputStream()));

			while (true) {
				String message = in.readUTF();
				System.out.println(message);
				
				if ("88".equals(message)) {
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			Utils.closeQuietly(in);
			Utils.closeQuietly(socket);
		}
	}
}
